mybatis中一对一中表与实体类关系建立方法 |
您所在的位置:网站首页 › mybatis 1对1 › mybatis中一对一中表与实体类关系建立方法 |
Mybatis学习笔记: Mybatis中一对一表与实体类关系建立的常用方法 准备表: Account表
User表
分析: 首先需要在数据库中查询两个表的数据全部数据(这里是以查询全部数据为例子) 建立sql:select u.*,a.id as aid,a.uid,a.money from account a,user u where u.id=a.uid 注:@sql查询 这里查询到了两个表所有的信息 (脑子里要有sql的概念) 那么对账户表和用户表查询了之后如何封装呢? 需要定义对应的实体类Account和User 定义好之后我们把查询出来的数据如何封装到这两个类当中 为解决字段不一致问题 那么需要做的就是用实体类和表中对应的字段进行resultMap标签对应封装: 在从表Account中定义主表User作为成员并且生成get和set方法,即在从表中定义主表的对象引用即可 解决了这个问题,我们就需要对mapper配置文件进行字段对应封装 首先在mapper标签中: 封装:acconut表的对应实体字段 这个地方的aid是在查询的过程对account表中的id进行了更名为了aid 接下: 匹配User类:因为在实体类中是匹配是User的属性 使用association标签中的property="user" column="uid" javaType="user" 注:个人理解user:对应的就是acconut实体类中的字段User user Column:代表的是uid也就是从表中的外键引用,javaType:为当前引用的类型
select u.*,a.id as aid,a.uid,a.money from account a,user u where u.id=a.uid; 注:@sql查询
表对应的实体类: Account: public class Account implements Serializable {private Integer id; private Integer uid; private double money; /** * 从表中定义主表的对象引用 */ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", uid=" + uid + ", money=" + money + '}'; } } User: public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address;public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
接口:
public interface IAccoutDao { /** * 查询Account和User所有信息操作 * * @return */ List findAll(); }
测试类: public class MybatisTest01 { /** * 初始化 */ private InputStream in; private SqlSession session; private IAccoutDao iAccoutDao; @Before public void init() throws IOException { //1.读取配置文件创建 in = Resources.getResourceAsStream("SqlMapconfig.xml"); //2.sqlsessionFactory创建工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产sqlsession对象 session = factory.openSession(true); //4.使sqlSession创建Dao接口的代理对象 iAccoutDao = session.getMapper(IAccoutDao.class); } /** * 释放资源 */ @After public void distor() throws IOException { //6.关闭连接 session.close(); in.close(); } @Test /** * 查询所有测试 */ public void test() throws IOException { //5.使用代理对象执行方法 List accounts = iAccoutDao.findAll(); for (Account a : accounts) { System.out.println(a); System.out.println(a.getUser()); } } 测试结果:
主要配置文件: Maven依赖: pom.xml 4.0.0 cn.xxy mybatis一对多查询 1.0-SNAPSHOT jar org.mybatis mybatis 3.4.5 mysql mysql-connector-java 5.1.6 log4j log4j 1.2.12 junit junit 4.10
主配置文件:
select u.*,a.id as aid,a.uid,a.money from account a,user u where u.id=a.uid;
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |